Содержание статьи
В начале времен, когда UNIX делал первые шаги по планете, не было ни стороннего ПО, ни проблем, связанных с управлением им. Если требовалось установить какое-то приложение, достаточно было скомпилировать его и положить полученный бинарник в каталог /bin.
Когда стало увеличиваться число приложений и возрастать их сложность, начали проявляться проблемы. Приложение могло состоять не только из одного бинарника, оно могло включать в себя ряд библиотек, man-страницы, конфигурационные файлы и многое другое. Появилась идея использовать рецепт install в инструкции сборки приложения (Makefile), чтобы установить все, что нужно, с помощью одной команды make install.
Все это работало, пока UNIX не превратился в мейнстрим и не начал распадаться на форки и клоны. Проблема состояла уже не в удобстве установки, а в том, что самих приложений уже было много, они могли зависеть друг от друга и требовать модификации для правильной работы в той или иной UNIX-подобной ОС.
Так появилась система портов BSD. По сути, это был сборник рецептов, который позволял скачивать, патчить, компилировать и устанавливать приложения в автоматическом режиме. С его же помощью приложение можно было корректно удалить, так, чтобы в системе не осталось никаких хвостов.
Красота системы портов состояла в том, что она позволяла не только устанавливать и удалять приложения, собранные из исходников, но и формировать из этих же исходников бинарные пакеты. Вскоре стало ясно, что пользователям гораздо удобнее ставить уже готовые пакеты, вместо того чтобы ждать окончания компиляции. Началась эра менеджеров пакетов.
В дистрибутивах Linux менеджер пакетов — де-факто стандарт. В отличие от тех же BSD, где есть четкая граница между неделимой базовой частью системы и набором установленных поверх нее портов/пакетов, дистрибутивы GNU/Linux состоят исключительно из пакетов. Ядро — отдельный пакет, базовый набор утилит командной строки — другой пакет, библиотека libc (главная часть системы после ядра) — еще один пакет.
Такое разделение не случайно, это сама суть GNU/Linux — множество написанных разными людьми компонентов, которые работают сообща. Но у этого подхода есть множество проблем. За сохранением зависимостей между пакетами необходимо строго следить; замена всего лишь одного системного пакета может привести к неработоспособности всей системы. Для обновления дистрибутива до новой версии приходится придумывать костыли: обновлять все базовые компоненты дистрибутива необходимо так, чтобы система не осталась в пограничном состоянии (когда часть пакетов обновлена, а часть нет).
Ну и конечно же, известное всем линуксоидам ограничение, когда ты просто не можешь установить две разные версии приложения. Содержимое пакета копируется в системные каталоги вместо своего выделенного, а даже если установка в выделенный каталог возможна, наверняка возникнут проблемы с зависимостями: приложение требует библиотеку libxyz.1.2, а в системе установлена libxyz.1.3, и ее версию нельзя понизить, потому что пакетный менеджер начнет ворчать, что приложения abc и bca требуют именно версию 1.3.
В общем, все сложно. Но есть несколько методов решить эти проблемы уже сегодня, и все они воплощены в Endless OS.
Endless OS
Endless OS — детище молодой компании Endless Mobile, которая специализируется на выпуске недорогих компактных компьютеров для развивающихся стран. Типичный представитель целевой аудитории Endless Mobile — африканец из глухой деревни, где даже мобильная связь — это роскошь. Поэтому Endless Computer — не просто недорогой, но и интуитивно понятный комп, не требующий подключения к интернету.

Полный образ Endless OS весит около 14 Гбайт и включает в себя больше 100 приложений на все случаи жизни и больше 50 тысяч статей из Википедии, а также различные обучающие программы. Есть и базовый образ на 2 Гбайт, содержащий только самое необходимое. Все остальное можно поставить из магазина приложений
В качестве рабочего стола Endless OS использует сильно модифицированную версию GNOME под названием EOS Shell. Это действительно очень простая среда, лишенная многих концепций стандартных десктопов. Это скорее планшетный или телефонный интерфейс, чем десктопный: панель переключения задач с треем, набор иконок и папок на рабочем столе и строка поиска, выполняющая поиск одновременно в Google и на жестком диске.

Инсталлятор под стать рабочему столу — максимально простой и не задающий лишних вопросов. Первая загрузка начинается с обучающего интерактивного ролика, в котором тебе объяснят, где что находится, как слушать музыку, смотреть видео и ставить сторонний софт.

Набор софта в версии на 2 Гбайт вполне стандартный: Google Chrome, LibreOffice, видеоплеер Totem, аудиоплеер Rhythmbox, просмотрщик фотографий Shotwell, программа для изучения языков Duolingo, файловый менеджер, калькулятор, настройки (стандартные настройки GNOME), терминал (его можно запустить только через поиск).

Магазин приложений удобный. Достаточно нажать install, и приложение будет установлено без единого вопроса и уж тем более запроса прав суперпользователя. Все приложения распространяются в форме самодостаточных пакетов. Инсталлятор размещает их в каталоге /var/lib/flatpak/app, а при запуске формирует виртуальное окружение, в котором будет работать приложение (об этом мы еще поговорим).


OSTree
В Endless OS нет понятия менеджера пакетов, да и самих пакетов тоже нет. Вся базовая часть дистрибутива, то есть та самая система, образ которой весит два гига, — это один монолитный неделимый кусок. Ты не можешь заменить те или иные его части, как в других дистрибутивах, или удалить ненужный софт. Это одна цельная система, так же как и в случае с Windows или macOS.
Однако, в отличие от тех же Windows и macOS, базовая часть Endless OS не имеет фиксированного состояния. Все ее файлы хранятся в Git-подобном репозитории OSTree. Это значит, что обновление до новой версии дистрибутива не происходит «на живую», как в других дистрибутивах, которые накатывают обновленные пакеты прямо на работающую систему. Вместо этого eos-updater скачивает измененные файлы в репозиторий, а затем создает жесткие ссылки на них в корневом каталоге. Например, /bin/bash в Endless OS просто жесткая ссылка на один из файлов в репозитории /ostree/repo. Если при обновлении системы bash тоже будет обновлен, eos-updater удалит старую ссылку и создаст новую на другой файл в репозитории.

В сравнении с классическим, основанным на пакетах подходом OSTree дает множество преимуществ. Он позволяет сделать обновление атомарным, когда система не переходит в новое обновленное состояние до тех пор, пока не будет к этому полностью готова. В обычном Linux установку пакетов можно прервать и получить неконсистентное состояние системы, которое может привести к полной неработоспособности ОС и необходимости переустановки. Здесь это исключено.
Более того, благодаря тому что OSTree хранит историю изменений, ОС можно откатить к предыдущему состоянию. Другими словами, система позволяет сделать даунгрейд, причем без необходимости что-либо скачивать и переустанавливать. Вся операция занимает буквально несколько секунд.
Ну и последнее. Хоть Endless OS это и не поддерживает, OSTree позволяет создать сразу несколько инсталляций одной и той же ОС разных версий. Все их файлы будут храниться в одном репозитории, так что даже не придется тратить дисковое пространство.
Flatpak
Базовая инсталляция Endless OS недоступна для записи. Ее нельзя изменить, а значит, нельзя установить пакеты или собрать приложение из исходников и установить с помощью команды ./configure && make && make install. Вместо этого Endless OS предлагает устанавливать софт в форме самодостаточных пакетов Flatpak.
Flatpak — это реализация старой, как и сам Linux, идеи о том, что приложения следует устанавливать в обособленные каталоги вместо копирования их файлов в каталоги самой системы. Flatpak не просто размещает приложения в отдельных каталогах, позволяя устанавливать несколько версий одного приложения и решая проблемы с зависимостями. Для каждого приложения он также формирует собственную песочницу, ограниченную с помощью механизмов пространств имен, cgroups, seccomp, позволяя контролировать доступ к тем или иным ресурсам машины. Например, приложению можно запретить доступ к Сети, а область видимости файловой системы ограничить домашним каталогом пользователя.
Все установленные с помощью Flatpak приложения размещаются в каталоге /var/lib/flatpak. При старте приложения Flatpak на лету формирует необходимое для его работы окружение. В частности, специально для приложения создается корневая файловая система в оперативной памяти (tmpfs), к ней в режиме «только для чтения» подключается каталог /usr основной системы, каталоги /proc, /sys и /dev с ограниченным набором файлов устройств, создается /etc с минимальным набором необходимых для работы конфигурационных файлов. Доступ к «опасным» системным вызовам ограничивается с помощью seccomp. В случае необходимости в режиме чтения-записи подключается домашний каталог пользователя, разрешается доступ к нужной функциональности ОС.

Приложение, запущенное с помощью Flatpak, оказывается отрезанным от основной системы и работает в своем собственном окружении. Да, оно имеет доступ, например, к каталогу /usr, но не может его модифицировать. Оно не видит процессы основной системы, не видит личные файлы пользователей (по умолчанию), не может работать с железом и не может выбраться из своего виртуального окружения.
Однако из-за этих же песочниц Flatpak оказывается бесполезен, если речь идет о системных приложениях. Именно поэтому Endless OS разделена на две части, одна из которых базовая, а вторая представляет собой набор приложений формата Flatpak, работающих в песочницах.
Заключение
Endless OS не единственная операционка, использующая OSTree для атомарного обновления системы. На OSTree построена ОС для запуска контейнеров Atomic, на ней основан meta-updater, система для атомарного обновления встраиваемых систем, собранных с помощью фреймворка OpenEmbedded.
Но Endless OS — это, кажется, единственная пользовательская ОС, использующая эту технологию. И это единственная ОС, весь сторонний софт для которой устанавливается с использованием Flatpak.
Endless OS — это, по сути, демонстрация того, каким может быть дистрибутив Linux, созданный исключительно для применения на десктопах. У него очень простой интуитивно понятный интерфейс, неделимая базовая часть ОС с минимальным набором необходимого софта. Ее очень легко установить и сложно сломать при обновлении, все сторонние приложения здесь работают в песочницах и установлены в свои собственные каталоги. Идеальный десктоп для не слишком грамотного пользователя.
Интересные факты
- Endless OS занимает 171-е место в рейтинге distrowatch.com.
- Вплоть до середины 2016 года Endless OS распространялась только в форме исходников.
- Представители Endless Mobile входят в надзорный совет GNOME Foundation.
- Компьютер Endless Mini стал выбором реакции на CES 2016.
- Самый дешевый компьютер Endless стоит 79 долларов, самый дорогой — 229 долларов.










